package com.mzx.javase.thread;

/**
 * 类描述：多线程机制，
 * 并发：在一个时间段内，多个任务抢夺CPU时间片轮流执行
 * 并行：同一时间点，多个任务各自执行各自的，互不干扰
 *
 * 实现多线程第一种方式：继承Thread类，重写run方法，实例化这个类的时候，调用start方法
 * 第二种方式：实现Runnable接口，实现run方法，new Thread(实现Runnable的类)，调用start方法
 * @ClassName ThreadTest01
 * @Description TODO
 * @Author 马子鑫
 * @Date 2022/8/1 12:25
 * @Version 1.0
 */
public class ThreadTest01 {
    /**
     *
     * @param args
     */
    public static void main(String[] args) {
        //第一种实现方式
//        MyThread myThread = new MyThread();
//        myThread.start();

        //第二种实现方式，使用实现Runnable接口的形式
//        MyRunnable myRunnable = new MyRunnable();
//        Thread thread = new Thread(myRunnable);
//        thread.start();

//        for (int i = 0; i < 10; i++) {
//            System.out.println("main方法栈：" + i);
//        }

        //新建4个Runnable对象，
//        MyRunnable myRunnable = new MyRunnable();
//        Thread t1 = new Thread(myRunnable, "窗口1");
//        Thread t2 = new Thread(myRunnable, "窗口2");
//        Thread t3 = new Thread(myRunnable, "窗口3");
//        Thread t4 = new Thread(myRunnable, "窗口4");
//        t1.start();
//        t2.start();
//        t3.start();
//        t4.start();

        MyThread t1 = new MyThread("窗口1");
        MyThread t2 = new MyThread("窗口2");
        MyThread t3 = new MyThread("窗口3");
        MyThread t4 = new MyThread("窗口4");
        t1.start();
        t2.start();
        t3.start();
        t4.start();

        /*
        继承Thread类和实现Runnable接口，应该使用哪个方法？
        如果不实现资源共享，两个都可以；如果有资源共享的需求，则Runnable要比继承Thread 更容易些
        实现Runnable接口的优势：
        1.适合多个相同程序代码的线程去共享同一个资源
        2.可以避免java中单继承的局限性
        3.增加程序的健壮性，实现解耦操作，代码可以被多个线程共享，代码和线程独立
        */

    }
}
